package demo3;

import java.util.Scanner;

/**
 * 测试类，用于通过控制台输入信息并调用 demo3 包中的 Course、CourseType、Student 和 StudentGrade 类。
 */
public class Test {
    public static void main(String[] args) {
        // 创建 Scanner 对象，用于从控制台读取用户输入的信息
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入课程信息，并创建 Course 对象
        System.out.println("请输入课程信息：");
        // 提示用户输入课程名称，并读取用户输入的课程名称
        System.out.print("课程名称: ");
        String courseName = scanner.nextLine();
        // 提示用户输入课程类型，并读取用户输入的课程类型
        System.out.print("课程类型: ");
        String courseType = scanner.nextLine();
        // 提示用户输入课程是否停用的信息（true 或 false），并读取该信息
        System.out.print("课程是否停用 (true/false): ");
        boolean isCourseActive = scanner.nextBoolean();
        // 消耗掉 nextBoolean() 之后的换行符，避免影响后续输入
        scanner.nextLine();

        // 使用用户输入的课程名称、课程类型和是否停用信息创建 Course 对象
        Course course = new Course(courseName, courseType, isCourseActive);
        // 调用 Course 对象的 displayCourse 方法，显示课程的详细信息
        course.displayCourse();

        // 提示用户输入课程类型信息，并创建 CourseType 对象
        System.out.println("\n请输入课程类型信息：");
        // 提示用户输入课程类型的名称，并读取该名称
        System.out.print("类型名称: ");
        String typeName = scanner.nextLine();
        // 提示用户输入课程类型是否停用的信息（true 或 false），并读取该信息
        System.out.print("类型是否停用 (true/false): ");
        boolean isTypeActive = scanner.nextBoolean();
        // 消耗掉 nextBoolean() 之后的换行符，避免影响后续输入
        scanner.nextLine();

        // 使用用户输入的课程类型名称和是否停用信息创建 CourseType 对象
        CourseType courseTypeObj = new CourseType(typeName, isTypeActive);
        // 调用 CourseType 对象的 displayAllTypes 方法，显示课程类型的详细信息
        courseTypeObj.displayAllTypes();
        // 调用 CourseType 对象的 canDelete 方法，判断该课程类型是否可以删除，并输出结果
        System.out.println("是否可以删除该类型: " + courseTypeObj.canDelete());

        // 提示用户输入学生信息，并创建 Student 对象
        System.out.println("\n请输入学生信息：");
        // 提示用户输入学生姓名，并读取该姓名
        System.out.print("姓名: ");
        String name = scanner.nextLine();
        // 提示用户输入学生性别，并读取该性别
        System.out.print("性别: ");
        String gender = scanner.nextLine();
        // 提示用户输入学生联系方式，并读取该联系方式
        System.out.print("联系方式: ");
        String contact = scanner.nextLine();
        // 提示用户输入学生所在班级，并读取该班级信息
        System.out.print("班级: ");
        String className = scanner.nextLine();
        // 提示用户输入学生所学专业，并读取该专业信息
        System.out.print("专业: ");
        String major = scanner.nextLine();

        // 使用用户输入的学生姓名、性别、联系方式、班级和专业信息创建 Student 对象
        Student student = new Student(name, gender, contact, className, major);
        // 调用 Student 对象的 validateStudentId 方法，验证学生 ID 是否合法，并输出验证结果
        System.out.println("学生 ID 是否合法: " + student.validateStudentId());
        // 调用 Student 对象的 displayStudent 方法，显示学生的详细信息
        student.displayStudent();

        // 提示用户输入学生成绩信息，并创建 StudentGrade 对象
        System.out.println("\n请输入学生成绩信息：");
        // 提示用户输入学生 ID，并读取该 ID
        System.out.print("学生 ID: ");
        String studentId = scanner.nextLine();
        // 提示用户输入课程名称，并读取该课程名称
        System.out.print("课程名称: ");
        String gradeCourseName = scanner.nextLine();
        // 提示用户输入学生成绩，并读取该成绩
        System.out.print("成绩: ");
        double grade = scanner.nextDouble();
        // 消耗掉 nextDouble() 之后的换行符，避免影响后续输入
        scanner.nextLine();

        // 使用用户输入的学生 ID、课程名称和成绩信息创建 StudentGrade 对象
        StudentGrade studentGrade = new StudentGrade(studentId, gradeCourseName, grade);
        // 调用 StudentGrade 对象的 displayGrade 方法，显示学生的成绩信息
        studentGrade.displayGrade();

        // 关闭 Scanner 对象，释放资源
        scanner.close();
    }
}